home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Just Call Me Internet
/
Just Call Me Internet.iso
/
prog
/
atari
/
m2
/
cat3src
/
magic
/
d
/
magicdos.d
< prev
next >
Wrap
Text File
|
1997-10-26
|
11KB
|
330 lines
(*----------------------------------------------------------------------*
* *
* MAGIC Modula's All purpose GEM Interface Cadre *
* ÿ ÿ ÿ ÿ ÿ *
*----------------------------------------------------------------------*
* Version 3.30 02.02.1992 (C)90/91/92 by Peter Hellinger Software *
*----------------------------------------------------------------------*
* Dieses Modul ist urheberrechtlich geschtzt. *
* *
* Die Verffentlichung des Quelltextes oder Teilen daraus in schrift- *
* licher Form, insbesondere in Zeitschriften, sowie die Verbreitung *
* ber Public-Domain-Hndler bedarf der ausdrcklichen schriftlichen *
* Genehmigung des Autors! *
* *
* Der Autor gibt hiermit die ausdrckliche Erlaubnis, das Modul jeder- *
* zeit auch im Quelltext weiterzugegeben, sofern dessen Text und ins- *
* besondere dieser Urheberrechts-Vermerk nicht verndert wird, und *
* durch die Weitergabe kein finanzieller Nutzen entsteht. Der Autor *
* behlt sich das Recht vor, diese Erlaubnis jederzeit u. ohne Angaben *
* von Grnden zu widerrufen. *
*----------------------------------------------------------------------*)
(*----------------------------------------------------------------------*
* MagicDOS Disk Operating System Modula-2 Interface *
*----------------------------------------------------------------------*)
DEFINITION MODULE MagicDOS;
FROM MagicSys IMPORT Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6,
Bit7, Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14,
Bit15, LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL,
sBITSET, lINTEGER, lCARDINAL, lWORD, lBITSET;
IMPORT SYSTEM;
CONST EOK = 0;
Error = -1;
EDrvNR = -2; (* Drive not ready *)
EUnCmd = -3; (* Unknown command *)
ECRC = -4; (* CRC error *)
EBadRq = -5; (* Bad request *)
ESeek = -6; (* Seek error *)
EMedia = -7; (* Unknown media *)
ESecNF = -8; (* Sector not found *)
EPaper = -9; (* No paper *)
EWritF = -10; (* Write fault *)
EReadF = -11; (* Read fault *)
EGenrl = -12; (* General error *)
EWrPro = -13; (* Write protect *)
EChng = -14; (* Media change *)
EUnDev = -15; (* Unknown device *)
EBadSF = -16; (* Bad sectors on format *)
EOther = -17; (* Insert other disk *)
EInvFN = -32; (* Invalid function number *)
EFilNF = -33; (* File not found *)
EPthNF = -34; (* Path not found *)
ENHndl = -35; (* No handles left *)
EAccDn = -36; (* Access denied *)
EIHndl = -37; (* Invalid handle *)
ENSMem = -39; (* Insufficient memory *)
EIMBA = -40; (* Invalid memory block address *)
EDrive = -46; (* Invaild drive specified *)
ENMFil = -49; (* No more files *)
ERange = -64; (* Range error *)
EIntrn = -65; (* Internal error *)
EPLFmt = -66; (* Invalid program load format *)
EGSBF = -67; (* Setblock failure due to growth restr *)
CONST ELOCKED = -58; (* Record is locked *)
ENSLOCK = -59; (* Matching Lock not found *)
PROCEDURE Pterm0;
TYPE tChar = RECORD
CASE : sCARDINAL OF
0: long: lCARDINAL;|
1: hi: sCARDINAL;
lo: sCARDINAL;|
2: kbshift: CHAR;
reserved: CHAR;
scan: CHAR;
char: CHAR;|
END;
END;
(* Zum einfachen "auseinandernehmen" des Longwerts, den Cconin liefert.
* Um die gltigen kbshift-Bits zu bekommen, mu das Bit 3 in der System-
* variablen conterm gesetzt sein.
*)
PROCEDURE Cconin (): lCARDINAL;
(* Die meisten Bindings liefern hier ein CHAR, was einer Unterschlagung
* gleichkommt.
*)
PROCEDURE Cconout (ch: CHAR);
PROCEDURE Cauxin (): sCARDINAL;
(* Liefert nach Profibuch tatschlich ein WORD. Wozu das allerdings gut
* sein soll...
*)
PROCEDURE Cauxout (ch: CHAR);
PROCEDURE Cprnout (ch: CHAR);
CONST Input = 377C;
PROCEDURE Crawio (ch: CHAR): lCARDINAL;
PROCEDURE Crawin (): lCARDINAL;
PROCEDURE Cnecin (): lCARDINAL;
PROCEDURE Cconws (REF string: ARRAY OF CHAR);
PROCEDURE Cconrs (VAR string: ARRAY OF CHAR);
PROCEDURE Cconis (): BOOLEAN;
PROCEDURE Dsetdrv (drive: sCARDINAL; VAR DriveMap: lBITSET);
PROCEDURE Cconos (): BOOLEAN;
PROCEDURE Cprnos (): BOOLEAN;
PROCEDURE Cauxis (): BOOLEAN;
PROCEDURE Cauxos (): BOOLEAN;
PROCEDURE Dgetdrv (): sCARDINAL;
(* Achtung! LPR stockt Records immer auf gerade Lnge auf... *)
TYPE PtrDTA = POINTER TO DTA;
DTA = RECORD
dReserved: ARRAY [0..20] OF Byte; (* 1.02 *)
dAttrib: Byte;
dTime: sCARDINAL;
dDate: sCARDINAL;
dLength: lCARDINAL;
dFname: ARRAY [0..13] OF CHAR;
END;
PROCEDURE Fsetdta (dtaptr: SYSTEM.ADDRESS);
PROCEDURE Super (VAR stack: SYSTEM.ADDRESS);
PROCEDURE Tgetdate (): sCARDINAL;
PROCEDURE Tsetdate (date: sCARDINAL);
PROCEDURE Tgettime (): sCARDINAL;
PROCEDURE Tsettime (time: sCARDINAL);
PROCEDURE Fgetdta (): SYSTEM.ADDRESS;
PROCEDURE Sversion (): sCARDINAL;
PROCEDURE Ptermres (keep: lCARDINAL; return: sCARDINAL);
TYPE DISKINFO = RECORD
bFree: lCARDINAL;
bTotal: lCARDINAL;
bSecsiz: lCARDINAL;
bClsiz: lCARDINAL;
END;
PROCEDURE Dfree (VAR dib: ARRAY OF LOC; drive: sCARDINAL);
PROCEDURE Dcreate (REF pfad: ARRAY OF CHAR): sINTEGER;
PROCEDURE Ddelete (REF pfad: ARRAY OF CHAR): sINTEGER;
PROCEDURE Dsetpath (REF pfad: ARRAY OF CHAR): sINTEGER;
CONST ReadOnly = Bit0;
Hidden = Bit1;
System = Bit2;
Volume = Bit3;
Folder = Bit4;
Archive = Bit5;
PROCEDURE Fcreate (REF name: ARRAY OF CHAR; attr: sBITSET): sINTEGER;
(* Ordner erzeugen NUR mit Dcreate !!! *)
CONST NamePRN = 'PRN:';
NameAUX = 'AUX:';
NameCON = 'CON:';
CONST CON = -1;
AUX = -2;
PRT = -3;
CONST StdIn = 0; (* Keyboard *)
StdOut = 1; (* Console *)
Serial = 2; (* RS232 *)
Printer = 3; (* Centronics *)
CONST Read = {}; (* Modus *)
Write = Bit0;
ReadWrite = Bit1;
Reserved1 = Bit2;
(* Folgende Modus-Flags sind nur gltig, wenn ein '_FLK'-Cookie
* gefunden wurde. Es handelt sich dann um eine Netzfhige
* Version von GEMDOS.
*)
CONST Reserved2 = Bit3;
ShareFlag1 = Bit4;
ShareFlag2 = Bit5;
ShareFlag3 = Bit6;
Inheritance = Bit7;
PROCEDURE Fopen (REF name: ARRAY OF CHAR; mode: sBITSET): sINTEGER;
PROCEDURE Fclose (handle: sINTEGER): sINTEGER;
PROCEDURE Fread (handle: sINTEGER; VAR count: lCARDINAL; buffer: SYSTEM.ADDRESS);
PROCEDURE Fwrite (handle: sINTEGER; VAR count: lCARDINAL; buffer: SYSTEM.ADDRESS);
PROCEDURE Fdelete (REF name: ARRAY OF CHAR): BOOLEAN;
CONST SeekStart = 0; (* Seekmodus *)
SeekPos = 1;
SeekEnd = 2;
PROCEDURE Fseek (offset: lINTEGER; handle, mode: sINTEGER): lCARDINAL;
PROCEDURE Fattrib (REF name: ARRAY OF CHAR; set: BOOLEAN; VAR attr: sBITSET);
PROCEDURE Fdup (handle: sINTEGER): sINTEGER;
PROCEDURE Fforce (std, nonstd: sINTEGER): BOOLEAN;
PROCEDURE Dgetpath (VAR pfad: ARRAY OF CHAR; drive: sCARDINAL);
CONST Minus1 = 0FFFFFFFFH;
PROCEDURE Malloc (bytes: lCARDINAL): SYSTEM.ADDRESS;
PROCEDURE Mfree (addr: SYSTEM.ADDRESS): BOOLEAN;
PROCEDURE Mshrink (addr: SYSTEM.ADDRESS; newSize: lCARDINAL): BOOLEAN;
CONST LoadnGo = 0;
Load = 3;
Run = 4;
NewPD = 5;
PROCEDURE Pexec (mode: sCARDINAL; VAR name, tail, env: ARRAY OF CHAR): sINTEGER;
PROCEDURE Pterm (code: sINTEGER);
PROCEDURE Fsfirst (REF name: ARRAY OF CHAR; attr: sBITSET): sINTEGER;
PROCEDURE Fsnext (): sINTEGER;
PROCEDURE Frename (REF curr, new: ARRAY OF CHAR): sINTEGER;
TYPE DOSTIME = RECORD
time: sCARDINAL;
date: sCARDINAL;
END;
PROCEDURE Fdatime (handle: sINTEGER; VAR dostime: ARRAY OF LOC; set: BOOLEAN);
(*====================================================================*)
(* Folgende Funktionen sind erst auf TT-Rechnern verfgbar! *)
(*====================================================================*)
CONST STRAM = 0;
FASTRAM = 1;
STRAMpref = 2;
FASTRAMpref = 3;
PROCEDURE Mxalloc (bytes: lCARDINAL; mode: sINTEGER): SYSTEM.ADDRESS;
(* Wie Malloc, jedoch mit Mode-Flag:
*
* STRAM = mode 0 nur ST-RAM benutzen
* FASTRAM = 1 nur FAST-RAM benutzen
* STRAMpref = 2 ST-RAM vorzugweise
* FASTRAMpref = 3 FAST-RAM vorzugsweise
*)
PROCEDURE Maddalt (start: SYSTEM.ADDRESS; size: lCARDINAL): sINTEGER;
(* stellt dem GEMDOS-MemoryManager weiteren Speicher zur Verfuegung (z.B.
* aus VME-RAM), der fuer Malloc's und Pexec's verwendet werden kann. GEMDOS
* uebernimmt damit vollstaendig die Kontrolle ueber diesen Speicherbereich,
* d.h. er darf nicht mehr anderweitig verwendet werden. Bei Allozierungen
* etc. ist er analog zum FastRAM.
* Zurueckgegeben wird 0 oder ein Fehlercode.
*)
(*========================================================================*
* Folgende Funktionen sind NUR DANN verfgbar, wenn der '_FLK' Cookie *
* vorhanden ist. Das ist nur der Fall wenn ein Netzwerk installiert ist! *
*========================================================================*)
CONST CreateLock = 0;
RemoveLock = 1;
PROCEDURE Flock (handle, mode: sINTEGER; start, length: lCARDINAL);
(* Realisiert Filelocking.
*
* handle = Handle des GEMDOS-Files
* mode = CreateLock = Locking ein, RemoveLock = Locking aus
* start = Offset vom Beginn der Datei, bei dem das Locking beginnen soll
* length = Lnge in Bytes des gelockten Dateiabschnittes
*)
END MagicDOS.